package com.misty.singleton.client4;

import com.misty.singleton.Person;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * 这种需要产生固定数量对象的模式就叫做有上限的多例模式，它是单例模式的一种扩展，采用有上限的多例模式，
 * 我们可以在设计时决定在内存中有多少个实例，方便系统进行扩展，
 * 修正单例可能存在的性能问题，提供系统的响应速度。例如读取文件，我们可以在系统启动时完成初始化工作，
 * 在内存中启动固定数量的reader实例，然后在需要读取文件时就可以快速响应
 */
public class Singleton {
    //定义每个对象产生的最大数量
    private static int singleMax = 3;
    //每个对象的私有属性
    private static List<String> names = new ArrayList<>();

    private static List<Person> instances = new ArrayList<>();

    private static int currentIndex;

    static {
        for (int i = 0; i < singleMax; i++) {
            instances.add(new Person("name" ,i));
        }
    }

    public Singleton(String name) {
        names.add(name);
    }

    public static Person getInstance() {
        Random random = new Random();
        currentIndex = random.nextInt(singleMax);
        return instances.get(currentIndex);
    }
}
